#include "app_common.h"

unsigned long long app_common_getCurrentTime(){
    struct timeval tv;
    // 获取当前时间
    gettimeofday(&tv, NULL);

    return tv.tv_sec * 1000 + tv.tv_usec / 1000;
  // tv_sec: 秒 tv_usec: 微秒
}

/**
* @brief 十六进制字符串转换为对应的字符数组
* @param hex_str 十六进制字符串
* @param chars_len 接收字符数组长度的指针
* @return char* 转换生生成的字符数组
*/
char *app_common_hexstrToChars(char *hex_str, int *chars_len)
{
  char *chars = malloc(strlen(hex_str) / 2);

  for (int i = 0; i < strlen(hex_str); i += 2){
    sscanf(hex_str + i, "%02X", (unsigned int *)(chars + i / 2));
  }
  *chars_len = strlen(hex_str) / 2;
  return chars;

  // // 得到十六进制字符串的长度
  // int hex_len = strlen(hex_str);
  // // 得到对应字符数组的长度，并保存到chars_len中
  // *chars_len = hex_len / 2;
  // // 申请对应字符数组的内存空间
  // char *chars = (char *)malloc(*chars_len);

  // for (int i = 0; i < hex_len - 1; i += 2)
  // {
  //   sscanf(hex_str + i, "%02X", (unsigned int *)(chars + i / 2));
  // }

  // return chars;
}

/**
* @brief 字符数组转换为十六进制字符串
* @param chars 字符数组
* @param chars_len 字符数组长度
* @return char* 转换生成的十六进制字符串
*/
char *app_common_charsToHexstr(char *chars, int chars_len)
{
  char *hex_str= malloc(chars_len * 2 + 1);

  for (int i = 0; i < chars_len; i++){
    sprintf(hex_str + i * 2, "%02X", chars[i]);

  }
  hex_str[chars_len * 2] = '\0';
  return hex_str;

  // // 动态分配十六进制字符串的内存空间
  // char *hex_str = (char *)malloc(chars_len * 2 + 1);
  // // 遍历字符数组中的每个字符
  // for (int i = 0; i < chars_len; i++)
  // {
  //   // 将1个字符对应的2位的十六进制字符保存到hex_str中
  //   sprintf(hex_str + i * 2, "%02X", chars[i]);
  // }
  // // 添加十六进制字符串的结束符
  // hex_str[chars_len * 2] = '\0';

  // return hex_str;
}
